In a multi-processor system, programs that execute on different processors may need to process information in a cooperative manner. For example, different processors may need to agree on a memory location at which a data structure is stored (e.g., so that information can be properly stored and/or retrieved by each processor). Similarly, different processors may need to agree on a global state that describes how data should be processed.
One approach to ensure that programs executing on different processors will process information in a cooperative manner is to use compile-time constants to define certain values. For example, a compile-time constant in a program executing on one processor might be used to define a memory location at which a data structure is stored. The same compile-time constant can then be used in a program executing on another processor to ensure that both programs will properly use the data structure to store and/or retrieve information. One disadvantage to such an approach, however, is that the programs may need to be re-compiled (and re-linked) when the configuration of the multi-processor system is modified (e.g., in a way that changes the memory location at which the data structure is stored). Such an inflexible approach may not be practical, especially if the configuration of the multi-processor system is frequently modified.
As another approach, certain values could be stored at pre-determined memory locations. For example, a pre-determined memory location might always contain a value (i.e., a pointer) that defines where a data structure is stored. Having each processor access the pre-determined memory location in order to determine the value, however, may not be efficient (e.g., the time required to access the pre-determined memory location could degrade the performance of the multi-processor system). Moreover, such an approach might require that the values be stored in registers, which may waste a limited resource.